package com.example.websocket;

import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;

@Configuration // 这是一个配置类
@EnableWebSocketMessageBroker // 启用WebSocket消息代理功能
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        // 配置一个简单的内存消息代理
        // 客户端订阅以 "/topic" 开头的主题时，会从这里接收消息
        config.enableSimpleBroker("/topic");
        // 客户端发送消息到以 "/app" 开头的目的地时，消息会被路由到 @MessageMapping 方法
        config.setApplicationDestinationPrefixes("/app");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        // 注册一个WebSocket端点 "/ws"
        // 客户端将通过这个端点连接到WebSocket服务器
        // .setAllowedOriginPatterns("*") 允许所有来源进行跨域连接（在生产环境请指定你的前端域名）
        // .withSockJS() 提供SockJS支持，为不支持原生WebSocket的浏览器提供备用方案
        registry.addEndpoint("/ws").setAllowedOriginPatterns("*").withSockJS();
    }
}